#pragma once

#include "texture.h"
#include "reflection.h"

namespace kp {

	struct Intersection;

	enum class TransportMode { Radiance, Importance };

	class Material {
	public:
		virtual ~Material() {}
		virtual void ComputeScatteringFunctions(Intersection* si,
			TransportMode mode, bool allowMultipleLobes) const = 0;
	};

	class MatteMaterial : public Material {
	public:
		MatteMaterial(Ref<Texture<Spectrum>> Kd) :Kd(Kd) {}

		virtual void ComputeScatteringFunctions(Intersection* si,
			TransportMode mode, bool allowMultipleLobes) const override;

	private:
		Ref<Texture<Spectrum>> Kd;
	};

}
